/**
 * 脱敏手机
 * @param phoneNumber
 * @returns {string}
 */
export function maskPhoneNumber(phoneNumber) {
    if(!phoneNumber) return phoneNumber;
    // 使用正则表达式匹配手机号中间的四位数字
    const pattern = /^(\d{3})\d{4}(\d{4})$/;
    const maskedNumber = String(phoneNumber).replace(pattern, '$1****$2');
    return maskedNumber;
}

/**
 * 脱敏邮箱
 * @param email
 * @returns {string}
 */
export function maskEmail(email) {
    if(!email) return email;
    const ems = email.split('@');
    const first = ems[0].slice(0, 3) + '****';
    return `${first}@${ems[1]}`;
}


/**
 * 防抖
 * @param fn {Function}   实际要执行的函数
 * @param delay {Number}  延迟时间，也就是阈值，单位是毫秒（ms）
 * @return {Function}     返回一个“去弹跳”了的函数
 */
export function de_bounce(fn, delay) {
    debugger
    let timer;
    return function () {

        let context = this
        let args = arguments

        clearTimeout(timer)

        timer = setTimeout(function () {
            fn.apply(context, args)
        }, delay)
    }
}

/**
 * 11 手机号判断
 * @param phoneNumber
 * @returns {boolean}
 */
export function isValidPhoneNumber(phoneNumber) {
  const regExp = /^1[3456789]\d{9}$/;
  return regExp.test(phoneNumber);
}

/**
 *  邮箱判断
 * @param email
 * @returns {boolean}
 */
export function isValidEmail(email) {
  const regExp = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return regExp.test(email);
}

/**
 * 正则判断字符串只能包含中文和英文
 * @param str
 * @returns {boolean}
 */
export function isChineseOrEnglish(str) {
  const reg = /^[\u4e00-\u9fa5a-zA-Z]+$/;
  return reg.test(str);
}


/**
 * 有用的数据
 * @param val
 * @returns {boolean}
 */
export const isValid = (val) => {
  if (val !== '' && val !== undefined && val !== null) {
    return true
  }
  return false
}

/**
 * 判断字符串是否只包含18位数字或字母的函数
 * @param str
 * @returns {boolean}
 */
export function validIdNumber(str) {
  const regExp = /^[a-zA-Z0-9]{18}$/;
  return regExp.test(str);
}

/**
 * 表单自定义规则校验：证件号码
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
export let idChange = (rule, value, callback) => {
  if (!value) { //所以当没有值的时候，我们直接callback，让他不校验直接执行下一步
    return callback()
  }else{
    const isValid = validIdNumber(value)
    if (isValid) {  //验证通过也下一步
      return callback();
    }else{
      callback(new Error("请输入18位数字或字母")); //验证不通过下一步只是抛出个错误
    }
  }
}

/**
 * 表单自定义规则校验:手机号
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
export let phoneChange = (rule, value, callback) => {
  // debugger
  if (!value) { //所以当没有值的时候，我们直接callback，让他不校验直接执行下一步
    return callback()
  } else {
    const isValid = isValidPhoneNumber(value);
    console.log('isValid',isValid)
    if (isValid) {  //验证通过也下一步
      return callback();
    } else {
      callback(new Error("请输入11位手机号")); //验证不通过下一步只是抛出个错误
    }
  }
}

/**
 * 表单自定义规则校验:邮箱
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
export let emailChange = (rule, value, callback) => {
  // debugger
  if (!value) { //所以当没有值的时候，我们直接callback，让他不校验直接执行下一步
    return callback()
  } else {
    const isValid = isValidEmail(value);
    if (isValid) {  //验证通过也下一步
      return callback();
    } else {
      callback(new Error("请输入正确的邮箱")); //验证不通过下一步只是抛出个错误
    }
  }
}
export let inputWordChange = (rule, value, callback) => {
  // debugger
  if (!value) { //所以当没有值的时候，我们直接callback，让他不校验直接执行下一步
    return callback()
  } else {
    const isValid = isChineseOrEnglish(value);
    if (isValid) {  //验证通过也下一步
      return callback();
    } else {
      callback(new Error("仅支持中文、英文")); //验证不通过下一步只是抛出个错误
    }
  }
}
